package it.maganar.lesscaos.client;

import it.maganar.lesscaos.session.ServiceGateRemote;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.*;


public class RegistrationWidget {
	
	private JFrame frame;
	private JPanel pannelloTitolo;
	private JPanel pannelloCorpo;
	private JPanel pannelloForm;
	private JLabel titolo;
	private JLabel labelNomeUtente;
	private JTextField areaNomeUtente;
	private JLabel labelPassword;
	private JPasswordField areaPassword;
	private JLabel labelNome;
	private JTextField areaNome;
	private JLabel labelCognome;
	private JTextField areaCognome;
	private JLabel labelNumTelefono;
	private JTextField areaNumTelefono;
	private JButton bottoneRegistra;
	private JPanel pannelloCentrale;
	private JPanel pannelloBottone;
	
	ServiceGateRemote serviceGate;
	
	
	
	RegistrationWidget(final LessCaosMainWidget lcmw){
		
		serviceGate = NetworkConnector.sgr;
		
		// Inizializzazione Frame
		frame = new JFrame("LESS-CAOS");
		frame.setLayout(new BorderLayout());
		
		
		// Inizializzazione e Inserimento pannelli principali
		pannelloTitolo = new JPanel();
		pannelloTitolo.setLayout(new FlowLayout());
		pannelloTitolo.setBackground(Color.DARK_GRAY);
		frame.add(pannelloTitolo, BorderLayout.NORTH);
		
		pannelloCorpo = new JPanel();
		pannelloCorpo.setLayout(new FlowLayout());
		//pannelloCorpo.setBackground(Color.LIGHT_GRAY);
		frame.add(pannelloCorpo, BorderLayout.CENTER);
		
		pannelloCentrale = new JPanel();
		pannelloCentrale.setLayout(new BoxLayout(pannelloCentrale, BoxLayout.Y_AXIS));
		pannelloCorpo.add(pannelloCentrale);
		
		// Inizializzazione e Inserimento label
		titolo = new JLabel("Registrazione");
		titolo.setForeground(Color.WHITE);
		pannelloTitolo.add(titolo);
		
		
		// Inizializzazione e Inserimento pannello form
		pannelloForm = new JPanel();
		pannelloForm.setLayout(new GridLayout(12,2));
		//pannelloForm.setBackground(Color.LIGHT_GRAY);
		pannelloCentrale.add(pannelloForm);
		
		pannelloBottone = new JPanel();
		pannelloBottone.setLayout(new FlowLayout());
		pannelloCentrale.add(pannelloBottone);
		
		//Inizializzazioni e Inserimento label e textField
		pannelloForm.add(new JLabel(""));
		pannelloForm.add(new JLabel(""));
		
		labelNomeUtente = new JLabel("Nome Utente: ");
		pannelloForm.add(labelNomeUtente);
		
		areaNomeUtente = new JTextField(10);
		pannelloForm.add(areaNomeUtente);
		
		pannelloForm.add(new JLabel(""));
		pannelloForm.add(new JLabel(""));
		
		labelPassword = new JLabel("Password: ");
		pannelloForm.add(labelPassword);
		
		areaPassword = new JPasswordField(10);
		pannelloForm.add(areaPassword);
		
		pannelloForm.add(new JLabel(""));
		pannelloForm.add(new JLabel(""));
		
		labelNome = new JLabel("Nome: ");
		pannelloForm.add(labelNome);
		
		areaNome = new JTextField(10);
		pannelloForm.add(areaNome);
		
		pannelloForm.add(new JLabel(""));
		pannelloForm.add(new JLabel(""));
		
		labelCognome = new JLabel("Cognome: ");
		pannelloForm.add(labelCognome);
		
		areaCognome = new JTextField(10);
		pannelloForm.add(areaCognome);
		
		pannelloForm.add(new JLabel(""));
		pannelloForm.add(new JLabel(""));
		
		labelNumTelefono = new JLabel("Numero Telefono: ");
		pannelloForm.add(labelNumTelefono);
		
		areaNumTelefono = new JTextField(10);
		pannelloForm.add(areaNumTelefono);
		
		pannelloForm.add(new JLabel(""));
		pannelloForm.add(new JLabel(""));
		
		// Inizializzazione e Inserimento button registra
		bottoneRegistra = new JButton("Registra");		
		bottoneRegistra.setEnabled(true);
		
		pannelloBottone.add(bottoneRegistra);
		
		//END
		frame.pack();
		frame.setSize(500,400);
		frame.setVisible(true);
		//frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		frame.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent event) {
				lcmw.setVisible(true);
	        } 
	    });
		
		
		//***** SEZIONE EVENTI *****//
		
		
		bottoneRegistra.addMouseListener(	new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent arg0) {
				
			}
			
			@Override
			public void mousePressed(MouseEvent arg0) {
				
				boolean positivo = true;
				
				// controllo che tutti i campi siano stati completati
				if (	( (areaNomeUtente.getText() != null) && (!areaNomeUtente.getText().trim().equals("")) ) &&
						( (areaPassword.getText() != null) && (!areaPassword.getText().trim().equals("")) ) &&
						( (areaNome.getText() != null) && (!areaNome.getText().trim().equals("")) ) &&
						( (areaCognome.getText() != null) && (!areaCognome.getText().trim().equals("")) ) &&
						( (areaNumTelefono.getText() != null) && (!areaNumTelefono.getText().trim().equals("")) )	){
				
					
					
					//controllo la correttezza del campo NomeUtente
					if ( areaNomeUtente.getText().contains(" ") ){																	
						positivo = false;
						JOptionPane.showMessageDialog(null, "Il campo Nome Utente non può contenere spazi", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);						
					}
					
					//controllo la correttezza del campo Password
					if ( areaPassword.getText().contains(" ") ){
						positivo = false;
						JOptionPane.showMessageDialog(null, "Il campo Password non può contenere spazi", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);					
					}
					
					//controllo la correttezza del campo Nome
					if ( !areaNome.getText().matches("[a-zA-z][a-zA-z ]*") ){			
						positivo = false;
						JOptionPane.showMessageDialog(null, "Il campo Nome è incorretto:\n" +
								"-può contenere solo lettere\n" +
								"-non può iniziare o terminare con uno spazio", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);						
					}
					
					
					//controllo la correttezza del campo Cognome
					if ( !areaCognome.getText().matches("[a-zA-z][a-zA-z ]*") ){
						positivo = false;
						JOptionPane.showMessageDialog(null, "Il campo Cognome è incorretto:\n" +
								"-può contenere solo lettere\n" +
								"-non può iniziare o terminare con uno spazio", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);
					}
					
					//controllo la correttezza del campo NumTelefono
					if ( !areaNumTelefono.getText().matches("[0-9]+") ){
						positivo = false;
						JOptionPane.showMessageDialog(null, "Il campo Numero di Telefono può contenere solo numeri", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);
					}										
										
				}
				else{
					positivo = false;
					JOptionPane.showMessageDialog(null, "Ci sono campi vuoti", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);
				}
				
				
				// Esecuzione Registrazione
				
				if (positivo){
					
					boolean esito;
					String nomeUtente = areaNomeUtente.getText();
					String password = areaPassword.getText();
					String nome = areaNome.getText();
					String cognome = areaCognome.getText();
					String nTelefono = areaNumTelefono.getText();
					
					esito = serviceGate.inserisciRegistrazione(nomeUtente, password, nome, cognome, nTelefono);
					
					if (esito){
						JOptionPane.showMessageDialog(null, "Regitrazione effettuata con successo", "Registrazione Effettuata", JOptionPane.INFORMATION_MESSAGE);					
					}
					else{
						JOptionPane.showMessageDialog(null, "Regitrazione non riuscita:\n Nome Utente già presente", "Registrazione Non riuscita", JOptionPane.ERROR_MESSAGE);

					}
					frame.setVisible(false);
					lcmw.setVisible(true);
				}
				
			}
			
			@Override
			public void mouseExited(MouseEvent arg0) {}
			
			@Override
			public void mouseEntered(MouseEvent arg0) {}
			
			@Override
			public void mouseClicked(MouseEvent arg0) {}
		});
		
		
				
	}
	
}
